import java.util.List;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;



public class GestionAlbum extends Shell {
	
	
	private Table table;
	
	int visible = 1 ;
	
	int ordre = 1 ;

	String element = null;
	private Text Titre;
	private Text Commentaire;
	private Text Erreur;

	/**
	 * Create the shell.
	 * @param display
	 */
	public GestionAlbum(final Display display) {
		super(display, SWT.SHELL_TRIM);
		
		Group grpChoix = new Group(this, SWT.NONE);
		grpChoix.setText("Choix\r\n");
		grpChoix.setBounds(7, 10, 195, 332);
		
		Group grpGestionDesPhotos = new Group(this, SWT.NONE);
		grpGestionDesPhotos.setText("Gestion des photos");
		grpGestionDesPhotos.setBounds(208, 10, 476, 678);
		
		Group grpVisualisation = new Group(grpGestionDesPhotos, SWT.NONE);
		grpVisualisation.setText("Visualisation");
		grpVisualisation.setBounds(10, 24, 440, 485);
		
		final Label lblVisualisation = new Label(grpVisualisation, SWT.NONE);
		lblVisualisation.setBounds(10, 25, 400, 400);
		
		final TableViewer tableViewer = new TableViewer(grpChoix, SWT.BORDER | SWT.FULL_SELECTION);
		table = tableViewer.getTable();
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				Erreur.setText("");
											
				org.eclipse.swt.graphics.Point p = new org.eclipse.swt.graphics.Point(e.x,e.y);
				
				element = (String) tableViewer.getCell(p).getElement() ;
				
				String chemin = Album.afficher(element ,  ordre);
				
				InfoImage image = Album.GetInfoImage(element, ordre);
				
				if((image.getTitre()!=null)&&(image.getCommentaire()!=null)){
					Titre.setText(image.getTitre());
					Commentaire.setText(image.getCommentaire());
				}
				else{
					Titre.setText("");
					Commentaire.setText("");
				}
				
				Image imageVisualisation = new Image(display,chemin) ;
				
				imageVisualisation = resize(imageVisualisation,400,400);
				
				lblVisualisation.setImage(imageVisualisation);
				
			}
		});
		table.setBounds(3, 15, 189, 313);
		

		
		Button button = new Button(grpVisualisation, SWT.NONE);
		button.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				ordre = ordre - 1;
				
				Erreur.setText("");
				if(element == null){
					
					Erreur.setText("Erreur :\r\nVous n'avez pas choisi \r\nd'album");
					
				}else {
					
					if(ordre <=0 )
					{
						ordre = 1 ;
						Erreur.setText("Erreur :\r\nVous visualisé déja la \r\npremière photo de l'album");
						
					}			
					else{
					
					String chemin = Album.afficher(element, ordre);
					
					InfoImage image = Album.GetInfoImage(element, ordre);
					
					if((image.getTitre()!=null)&&(image.getCommentaire()!=null)){
						Titre.setText(image.getTitre());
						Commentaire.setText(image.getCommentaire());
					}
					else{
						Titre.setText("");
						Commentaire.setText("");
					}
					
					Image imageVisualisation = new Image(display,chemin) ;
					
					imageVisualisation = resize(imageVisualisation,360,360);
					
					lblVisualisation.setImage(imageVisualisation);
					
					}
				}
							
			}
		});
		button.setText("Image précédente");
		button.setBounds(10, 445, 109, 25);
		
		Button button_1 = new Button(grpVisualisation, SWT.NONE);
		button_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				Erreur.setText("");
				
				if(element == null){
					
					Erreur.setText("Erreur :\r\nVous n'avez pas choisi \r\nd'album");
					
				}else {
				
					ordre = ordre + 1;
					
					String chemin = Album.afficher(element, ordre);
					
					InfoImage image = Album.GetInfoImage(element, ordre);
					
					if((image.getTitre()!=null)&&(image.getCommentaire()!=null)){
						Titre.setText(image.getTitre());
						Commentaire.setText(image.getCommentaire());
					}
					else{
						Titre.setText("");
						Commentaire.setText("");
					}
					Image imageVisualisation = new Image(display,chemin) ;
					
					imageVisualisation = resize(imageVisualisation,360,360);
					
					lblVisualisation.setImage(imageVisualisation);
				}
				
				
			}
		});
		button_1.setText("Image suivante");
		button_1.setBounds(300, 445, 109, 25);
		
		Button btnAjouterUneImage = new Button(grpVisualisation, SWT.NONE);
		btnAjouterUneImage.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				Erreur.setText("");
				
				if(element == null){
					
					Erreur.setText("Erreur :\r\nVous n'avez pas choisi \r\nd'album");
					
				}else {
				
				
					try {
						Display display = Display.getDefault();
						AjouterPhoto shell = new AjouterPhoto(display,element);
						shell.open();
						shell.layout();
						while (!shell.isDisposed()) {
							if (!display.readAndDispatch()) {
								display.sleep();
							}
						}
					} catch (Exception e1) {
						e1.printStackTrace();
					}
				}
				
				
			}
		});
		btnAjouterUneImage.setBounds(142, 445, 140, 25);
		btnAjouterUneImage.setText("Ajouter une Image");
		
		Group grpInformationsPhotos = new Group(grpGestionDesPhotos, SWT.NONE);
		grpInformationsPhotos.setText("Informations Photos");
		grpInformationsPhotos.setBounds(10, 515, 440, 153);
		
		Button btnNewButton = new Button(grpInformationsPhotos, SWT.NONE);
		btnNewButton.setBounds(279, 118, 151, 25);
		btnNewButton.setText("Valider les changements");
		
		Titre = new Text(grpInformationsPhotos, SWT.BORDER);
		Titre.setBounds(108, 28, 308, 21);
		
		Label lblTitre = new Label(grpInformationsPhotos, SWT.NONE);
		lblTitre.setBounds(20, 31, 55, 15);
		lblTitre.setText("Titre :");
		
		Commentaire = new Text(grpInformationsPhotos, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI);
		Commentaire.setBounds(108, 55, 308, 57);
		
		Label lblCommentaires = new Label(grpInformationsPhotos, SWT.NONE);
		lblCommentaires.setBounds(20, 58, 96, 15);
		lblCommentaires.setText("Commentaires :\r\n");
		
		Erreur = new Text(this, SWT.BORDER | SWT.CENTER | SWT.MULTI);
		Erreur.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
		Erreur.setBounds(10, 348, 192, 87);
		
		
		createContents();
		
	    // The input will be an array or a collection.
	    // We will need every element of this input.
		tableViewer.setContentProvider( new ArrayContentProvider());
		
	    // For very element to display, we will display its default string
		// (i.e. Object#toString()).
		tableViewer.setLabelProvider( new LabelProvider());
			
		Album.getAlbums(visible);
				
	    // Eventually, let's define an input
		List<String> listAlbumPublic = Album.getAlbums();
		
		System.out.println(listAlbumPublic.toString());
		
		tableViewer.setInput( listAlbumPublic );
		
		Album.removeAlbum();
		
	}

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("Gestion de mes Albums");
		setSize(730, 736);

	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	private Image resize(Image image, int width, int height) {
		
		Image scaled = new Image(Display.getDefault(), width, height);
		GC gc = new GC(scaled);
		gc.setAntialias(SWT.ON);
		gc.setInterpolation(SWT.HIGH);
		gc.drawImage(image, 0, 0, 
		image.getBounds().width, image.getBounds().height, 
		0, 0, width, height);
		gc.dispose();
		image.dispose(); // don't forget about me!
		return scaled;
		}
}

